package com.revzone.demo001.utils.ExcelUtils;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.alibaba.excel.write.metadata.WriteSheet;
import org.springframework.stereotype.Component;

import javax.servlet.ServletOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Objects;

/**
 * String 工具类
 *
 * @author lsa
 * @date 2023/06/29
 */
@Component
public class ExcelUtils {

//    /**
//     * 导出Excel文件
//     * @param dataList 数据列表
//     * @param filePath 文件路径
//     * @param clazz 数据对象的Class类型
//     * @param excelType Excel文件类型
//     */
//    public <T> void exportExcel(List<T> dataList, String filePath, Class<T> clazz, ExcelTypeEnum excelType) {
//        try {
//            if (excelType == ExcelTypeEnum.XLS) {// 根据文件类型选择合适的写入器
//                ExcelWriter excelWriter = EasyExcel.write(filePath, clazz).build();// 创建ExcelWriter，使用XLS格式
//                WriteSheet writeSheet = EasyExcel.writerSheet("Sheet1").build();// 创建WriteSheet
//                excelWriter.write(dataList, writeSheet);// 将数据写入Excel文件
//                excelWriter.finish();// 写入完成
//            } else if (excelType == ExcelTypeEnum.XLSX || excelType == ExcelTypeEnum.CSV) {
//                ExcelWriter excelWriter = EasyExcel.write(filePath, clazz).excelType(excelType).build();// 创建ExcelWriter，使用XLSX或CSV格式
//                WriteSheet writeSheet = EasyExcel.writerSheet("Sheet1").build();// 创建WriteSheet
//                excelWriter.write(dataList, writeSheet);// 将数据写入Excel文件
//                excelWriter.finish();// 写入完成
//            } else {
//                throw new RuntimeException("文件类型导出格式不匹配！（默认支持格式：.XLS、.XLSX、.CSV）");
//            }
//        } catch (Exception e) {
//            // 处理异常
//            e.printStackTrace();
//            // 或者抛出自定义异常，根据实际情况进行处理
//        }
//    }


    public <T> void exportExcel(List<?> dataList, ServletOutputStream outputStream, Class<?> clazz, ExcelTypeEnum excelType) throws IOException {
        Objects.requireNonNull(dataList, "数据列表不能为空");
        Objects.requireNonNull(outputStream, "输出流不能为空");
        Objects.requireNonNull(clazz, "数据对象的Class类型不能为空");

        ExcelWriter excelWriter = null;
        try {
            excelWriter = EasyExcel.write(outputStream, clazz).excelType(excelType).build();
            WriteSheet writeSheet = EasyExcel.writerSheet("Sheet1").build();
            excelWriter.write(dataList, writeSheet);
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("导出Excel文件失败：" + e.getMessage());
        } finally {
            if (excelWriter != null) {
                excelWriter.finish();
            }
        }
    }




    /**
     * 导入 Excel 文件数据
     *
     * @param inputStream Excel 文件输入流
     * @param clazz       数据对象的 Class 类型
     * @return 导入的数据列表
     * @throws IOException 如果导入过程中发生 I/O 错误
     */
    public <T> List<T> importExcel(InputStream inputStream, Class<T> clazz) throws IOException {
        try {
            return EasyExcel.read(inputStream).head(clazz).sheet().doReadSync();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("导入 Excel 文件失败：" + e.getMessage());
        } finally {
            if (inputStream != null) {
                inputStream.close();
            }
        }
    }

}

